Advanced JDBC Features

Java Technologies - জেডিবিসি (JDBC)
387

JDBC (Java Database Connectivity) হল একটি API যা Java অ্যাপ্লিকেশনগুলিকে ডেটাবেসের সাথে সংযোগ স্থাপন এবং ডেটাবেস অপারেশন সম্পাদন করার সুযোগ দেয়। JDBC-এর বেসিক ফিচারগুলোর পাশাপাশি Advanced JDBC Features ডেটাবেস অপারেশন এবং সংযোগের কাজকে আরও উন্নত এবং কার্যকরী করে তোলে। এই ফিচারগুলো বৃহৎ ডেটাবেস অ্যাপ্লিকেশনগুলির জন্য যেমন ট্রানজেকশন ম্যানেজমেন্ট, ব্যাচ প্রসেসিং, ব্লব (BLOB) এবং ক্লব (CLOB) সহ অন্যান্য উন্নত ফিচার অন্তর্ভুক্ত করে।

এখানে আমরা কিছু Advanced JDBC Features এবং তাদের ব্যবহার দেখব:


1. Transaction Management (ট্রানজেকশন ব্যবস্থাপনা)

Transaction Management হল একাধিক ডেটাবেস অপারেশনকে একটি একক ইউনিট হিসেবে গঠন করা, যাতে কোনো একটি অপারেশন ব্যর্থ হলে পুরো ট্রানজেকশনটি ব্যর্থ হয় এবং ডেটাবেসের অবস্থান পূর্বাবস্থায় ফিরে আসে।

Best Practices:

  • AutoCommit Mode Off: JDBC ডিফল্টভাবে AutoCommit মোড চালু থাকে, যার মানে হল প্রতিটি SQL স্টেটমেন্টের পরপরই পরিবর্তন স্বয়ংক্রিয়ভাবে সংরক্ষিত হয়। ট্রানজেকশন ব্যবস্থাপনায় এটি বন্ধ করা উচিত।
  • Commit and Rollback: পরিবর্তনগুলিকে কমিট বা রোলব্যাক করতে commit() এবং rollback() মেথড ব্যবহার করা হয়।

উদাহরণ: Transaction Management

import java.sql.*;

public class JdbcTransactionExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        
        Connection conn = null;
        Statement stmt = null;
        
        try {
            // ডেটাবেস সংযোগ স্থাপন করা
            conn = DriverManager.getConnection(url, username, password);
            conn.setAutoCommit(false);  // AutoCommit বন্ধ করা
            
            stmt = conn.createStatement();
            
            // SQL ক্যোয়ারি রান করা
            stmt.executeUpdate("UPDATE employees SET salary = salary + 500 WHERE department = 'IT'");
            stmt.executeUpdate("UPDATE employees SET salary = salary + 300 WHERE department = 'HR'");
            
            // ট্রানজেকশন কমিট করা
            conn.commit();
            System.out.println("Transaction committed successfully.");
            
        } catch (SQLException e) {
            try {
                // ত্রুটি হলে ট্রানজেকশন রোলব্যাক করা
                if (conn != null) {
                    conn.rollback();
                    System.out.println("Transaction rolled back.");
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        } finally {
            try {
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

2. Batch Processing (ব্যাচ প্রসেসিং)

Batch Processing হল একাধিক SQL স্টেটমেন্ট একসাথে ব্যাচ হিসেবে চালানো, যা পারফরম্যান্সের জন্য উপকারী। এতে একাধিক INSERT, UPDATE, বা DELETE ক্যোয়ারি একযোগে এক্সিকিউট করা হয় এবং ডেটাবেসের সাথে কম কমিউনিকেশন হয়, ফলে পারফরম্যান্সের উন্নতি ঘটে।

Best Practices:

  • addBatch() and executeBatch(): addBatch() দিয়ে SQL ক্যোয়ারি ব্যাচে যোগ করা হয় এবং executeBatch() দিয়ে একসাথে সমস্ত ক্যোয়ারি এক্সিকিউট করা হয়।

উদাহরণ: Batch Processing

import java.sql.*;

public class JdbcBatchProcessingExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        
        Connection conn = null;
        PreparedStatement pstmt = null;
        
        try {
            // ডেটাবেস সংযোগ স্থাপন করা
            conn = DriverManager.getConnection(url, username, password);
            String sql = "INSERT INTO employees (name, department) VALUES (?, ?)";
            pstmt = conn.prepareStatement(sql);
            
            // ব্যাচে ক্যোয়ারি যোগ করা
            pstmt.setString(1, "John Doe");
            pstmt.setString(2, "IT");
            pstmt.addBatch();
            
            pstmt.setString(1, "Jane Smith");
            pstmt.setString(2, "HR");
            pstmt.addBatch();
            
            pstmt.setString(1, "Mike Johnson");
            pstmt.setString(2, "Finance");
            pstmt.addBatch();
            
            // ব্যাচ এক্সিকিউট করা
            pstmt.executeBatch();
            System.out.println("Batch execution completed.");
            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

3. Scrollable ResultSet (Scrollable ResultSet)

Scrollable ResultSet ডেটাবেসের রেজাল্ট সেটের মধ্যে পূর্ববর্তী বা পরবর্তী রেকর্ডে স্ক্রোল করার অনুমতি দেয়। এটি ডেটাবেসের অনেক বড় ডেটা সেট পরিচালনা করার জন্য কার্যকর।

Best Practices:

  • TYPE_SCROLL_INSENSITIVE: এটি আপনাকে রেজাল্ট সেটের মধ্যে স্ক্রোল করতে এবং রেকর্ডে সিলেকশন পরিবর্তন করতে সহায়তা করে।
  • TYPE_FORWARD_ONLY: এটি শুধুমাত্র ফরওয়ার্ডে ডেটা স্ক্রোল করার অনুমতি দেয়।

উদাহরণ: Scrollable ResultSet

import java.sql.*;

public class JdbcScrollableResultSetExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        
        try {
            // ডেটাবেস সংযোগ স্থাপন করা
            conn = DriverManager.getConnection(url, username, password);
            
            // Scrollable ResultSet তৈরি করা
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery("SELECT * FROM employees");
            
            // প্রথম রেকর্ডে স্ক্রোল করা
            if (rs.first()) {
                System.out.println("First Record: " + rs.getString("name"));
            }
            
            // শেষ রেকর্ডে স্ক্রোল করা
            if (rs.last()) {
                System.out.println("Last Record: " + rs.getString("name"));
            }
            
            // পূর্ববর্তী রেকর্ডে স্ক্রোল করা
            if (rs.previous()) {
                System.out.println("Previous Record: " + rs.getString("name"));
            }
            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

4. Handling Large Data (বড় ডেটা পরিচালনা)

বড় ডেটাসেট বা ব্লব (BLOB) এবং ক্লব (CLOB) ডেটা টाइপের সাথে কাজ করার সময় JDBC-এ কিছু বিশেষ পদ্ধতি ব্যবহার করা হয়।

Best Practices:

  • Streaming Data: BLOB বা CLOB ডেটা এক্সট্র্যাক্ট করার সময় পুরো ডেটা একসাথে লোড করার পরিবর্তে স্ট্রিমিং পদ্ধতি ব্যবহার করুন।
  • setBinaryStream() and getBinaryStream(): BLOB ডেটা স্ট্রিম করার জন্য এই মেথড ব্যবহার করা হয়।

উদাহরণ: BLOB ডেটা হ্যান্ডলিং

import java.sql.*;
import java.io.*;

public class JdbcBlobExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        
        Connection conn = null;
        PreparedStatement pstmt = null;
        FileInputStream fileInputStream = null;
        
        try {
            conn = DriverManager.getConnection(url, username, password);
            
            // BLOB ফাইল ইনপুট স্ট্রিম
            fileInputStream = new FileInputStream(new File("path_to_image.jpg"));
            
            String sql = "INSERT INTO employee_images (employee_id, image) VALUES (?, ?)";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, 101); // employee_id
            pstmt.setBinaryStream(2, fileInputStream); // BLOB ফাইল ইনপুট
            
            pstmt.executeUpdate();
            System.out.println("BLOB data inserted successfully.");
            
        } catch (SQLException | FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileInputStream != null) fileInputStream.close();
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (SQLException | IOException e) {
                e.printStackTrace();
            }
        }
    }
}

5. CallableStatement (Stored Procedure Execution)

JDBC-তে CallableStatement ব্যবহার করে আপনি ডেটাবেসে সংরক্ষিত Stored Procedures এক্সিকিউট করতে পারেন, যা একাধিক SQL ক্যোয়ারি একত্রে কার্যকর করার জন্য উপকারী।

Best Practices:

  • Execute Stored Procedures: SQL কোডের পরিবর্তে ডেটাবেসে সংরক্ষিত Stored Procedures ব্যবহার করুন, যা কোডের পুনঃব্যবহারযোগ্যতা এবং কার্যকারিতা বাড়ায়।

উদাহরণ: CallableStatement

import java.sql.*;

public class JdbcCallableStatementExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        
        Connection conn = null;
        CallableStatement stmt = null;
        
        try {
            conn = DriverManager.getConnection(url, username, password);
            
            // Stored Procedure কল করা
            String sql = "{call getEmployeeDetails(?)}";  // কল করা হবে getEmployeeDetails স্পর্শিত স্টোরড প্রোসিডিওর
            stmt = conn.prepareCall(sql);
            stmt.setInt(1, 101);  // আর্গুমেন্ট পাস করা
            
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                System.out.println("Employee Name: " + rs.getString("name"));
            }
            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

সারাংশ

Advanced JDBC Features ডেটাবেসের অপারেশন এবং সংযোগকে আরও শক্তিশালী এবং কার্যকরী করে তোলে। এর মধ্যে Transaction Management, Batch Processing, Scrollable ResultSet, BLOB/CLOB Handling, এবং CallableStatement (Stored Procedures) অন্তর্ভুক্ত। এই ফিচারগুলি ডেটাবেস অপারেশনের পারফরম্যান্স উন্নত করতে সহায়তা করে এবং বৃহৎ বা জটিল ডেটাবেস অ্যাপ্লিকেশনগুলির জন্য অপরিহার্য।

Content added By

Scrollable এবং Updatable ResultSet এর ব্যবহার

279

JDBC (Java Database Connectivity)-এ ResultSet হল একটি অবজেক্ট যা SQL কুয়েরি চালানোর মাধ্যমে ডেটাবেস থেকে রিটার্ন হওয়া ডেটাকে ধারণ করে। Scrollable এবং Updatable ResultSet হল দুটি গুরুত্বপূর্ণ ফিচার যা আপনাকে ডেটাবেস থেকে প্রাপ্ত ডেটাকে স্ক্রোল বা আপডেট করতে সাহায্য করে।

1. Scrollable ResultSet

Scrollable ResultSet এর মাধ্যমে আপনি রিটার্ন হওয়া ডেটা সেটের যে কোনো রেকর্ডে যেকোনো অবস্থানে স্ক্রোল করতে পারেন, যেমন প্রথম, শেষ, নির্দিষ্ট ইনডেক্স বা পূর্ববর্তী/পরবর্তী রেকর্ডে যেতে পারেন। সাধারণ forward-only ResultSet ডিফল্টভাবে শুধুমাত্র ডেটা ফেচ করার সময় পরবর্তী রেকর্ডে যেতে পারে, তবে Scrollable ResultSet আপনাকে ডেটা সেটের মধ্যে উল্টোও যেতে দেয়, যেমন previous(), first(), last(), absolute(), এবং relative() মেথড ব্যবহার করে।

Scrollable ResultSet এর সুবিধা:

  • Random Access: আপনি ডেটা সেটের মধ্যে যেকোনো অবস্থানে চলে যেতে পারবেন।
  • Flexibility: রেকর্ডকে কোনো নির্দিষ্ট অবস্থানে স্ক্রোল করা সম্ভব।

2. Updatable ResultSet

Updatable ResultSet ব্যবহার করে আপনি ডেটাবেসে থাকা ডেটা পরিবর্তন (update), মুছতে (delete), এবং নতুন ডেটা যোগ করতে পারেন। এটি INSERT, UPDATE, এবং DELETE অপারেশনগুলির জন্য খুবই কার্যকরী। এর মাধ্যমে আপনি ডেটাবেসের রেকর্ডগুলি সরাসরি পরিবর্তন করতে পারেন।

Updatable ResultSet এর সুবিধা:

  • Direct Update: ডেটা অবজেক্টে ডেটা পরিবর্তন করা যায় এবং তারপর সেই পরিবর্তনগুলি ডেটাবেসে ক্যাপচার করা যায়।
  • Efficient Changes: ডেটাবেসের মধ্যে পরিবর্তন খুব দ্রুত হয় এবং অ্যাপ্লিকেশন কোডে কেবল ResultSet.updateXXX() ব্যবহার করতে হয়।

Scrollable এবং Updatable ResultSet ব্যবহার করার জন্য ধাপ:

  1. Scrollable ResultSet তৈরির জন্য ResultSet.TYPE_SCROLL_INSENSITIVE বা ResultSet.TYPE_SCROLL_SENSITIVE ব্যবহার করা হয়।
  2. Updatable ResultSet তৈরির জন্য ResultSet.CONCUR_UPDATABLE ব্যবহার করা হয়।

Scrollable এবং Updatable ResultSet তৈরি করা:

import java.sql.*;

public class ScrollableAndUpdatableResultSetExample {
    public static void main(String[] args) {
        Connection connection = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            // ডেটাবেসের সাথে সংযোগ স্থাপন
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "password");

            // Statement তৈরি করা এবং Scrollable, Updatable ResultSet তৈরি করা
            String query = "SELECT id, name, department FROM employees";
            stmt = connection.createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE, // Scrollable ResultSet
                    ResultSet.CONCUR_UPDATABLE         // Updatable ResultSet
            );

            // কুয়েরি চালানো
            rs = stmt.executeQuery(query);

            // স্ক্রোলিং এবং ডেটা আপডেটের জন্য ResultSet ব্যবহার করা

            // প্রথম রেকর্ডে যেতে
            if (rs.first()) {
                System.out.println("First Record:");
                System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Department: " + rs.getString("department"));
            }

            // পরবর্তী রেকর্ডে যেতে
            if (rs.next()) {
                System.out.println("Next Record:");
                System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Department: " + rs.getString("department"));
            }

            // প্রথম রেকর্ডে ফিরে আসা
            if (rs.previous()) {
                System.out.println("Previous Record (back to First):");
                System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Department: " + rs.getString("department"));
            }

            // রেকর্ড আপডেট করা (যেমন নাম পরিবর্তন করা)
            if (rs.absolute(2)) { // দ্বিতীয় রেকর্ডে গিয়ে আপডেট করা
                rs.updateString("name", "Updated Name");
                rs.updateRow();  // আপডেট করা
                System.out.println("Updated Record:");
                System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") + ", Department: " + rs.getString("department"));
            }

            // নতুন রেকর্ড যোগ করা
            rs.moveToInsertRow();  // Insert Row এ যাওয়া
            rs.updateInt("id", 4);  // নতুন id
            rs.updateString("name", "New Employee");
            rs.updateString("department", "Marketing");
            rs.insertRow();  // নতুন রেকর্ড ইনসার্ট করা

            System.out.println("Inserted New Record Successfully!");

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

কোড ব্যাখ্যা:

  1. Scrollable and Updatable ResultSet তৈরি করা:
    • connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE) দ্বারা স্ক্রলেবল এবং আপডেটেবল রেজাল্টসেট তৈরি করা হয়।
    • TYPE_SCROLL_INSENSITIVE: এটি একটি স্ক্রলেবল রেজাল্টসেট তৈরি করে যা ডেটা সেভ বা পরিবর্তিত হলে সেগুলোর পরিবর্তন রিফ্লেক্ট করে না।
    • CONCUR_UPDATABLE: এটি আপডেটেবল রেজাল্টসেট তৈরি করে, যার মাধ্যমে আপনি রেকর্ড পরিবর্তন করতে পারবেন।
  2. ResultSet স্ক্রোলিং:
    • rs.first(): প্রথম রেকর্ডে যাওয়ার জন্য ব্যবহার করা হয়।
    • rs.next(): পরবর্তী রেকর্ডে যাওয়ার জন্য ব্যবহার করা হয়।
    • rs.previous(): পূর্ববর্তী রেকর্ডে যাওয়ার জন্য ব্যবহার করা হয়।
    • rs.absolute(n): নির্দিষ্ট রেকর্ডে যেতে ব্যবহৃত হয়।
  3. ResultSet আপডেট:
    • rs.updateString("name", "Updated Name"): নামের কলাম আপডেট করা হয়।
    • rs.updateRow(): আপডেটের পর সেই রেকর্ডটি ডেটাবেসে আপডেট করা হয়।
    • rs.moveToInsertRow(): নতুন রেকর্ড ইনসার্ট করার জন্য এটি ব্যবহার করা হয়।
    • rs.insertRow(): নতুন রেকর্ড ইনসার্ট করা হয়।

Scrollable এবং Updatable ResultSet এর সুবিধা

  1. Scrollable ResultSet:
    • Random Access: আপনি ডেটা সেটের মধ্যে যেকোনো অবস্থানে চলে যেতে পারেন।
    • Flexibility: স্ক্রোলিং অপশন যেমন প্রথমে যাওয়া, শেষতে যাওয়া, পূর্ববর্তী বা পরবর্তী রেকর্ডে যাওয়া, যা ডেটা নিয়ে আরও কার্যকরী কাজ করতে সক্ষম।
  2. Updatable ResultSet:
    • Direct Data Modification: ডেটাবেসে সরাসরি পরিবর্তন করতে পারবেন।
    • Insert, Update, Delete Operations: আপনি INSERT, UPDATE, এবং DELETE কুয়েরি এক্সিকিউট করতে পারেন, যা খুবই সহজ।

সারাংশ

Scrollable এবং Updatable ResultSet হল JDBC এর শক্তিশালী ফিচার যা আপনাকে ডেটাবেসের মধ্যে রেকর্ড স্ক্রোল বা পরিবর্তন করার সুযোগ দেয়। Scrollable ResultSet ডেটাবেসের ডেটা সেটের মধ্যে স্ক্রোল করার জন্য ব্যবহার করা হয়, এবং Updatable ResultSet ডেটাবেসের ডেটাতে পরিবর্তন (INSERT, UPDATE, DELETE) করার জন্য ব্যবহৃত হয়। এগুলি ResultSet এর সাধারণ ব্যবহারের চেয়ে আরও উন্নত এবং কার্যকরী পদ্ধতি সরবরাহ করে, যা ডেটাবেস পরিচালনা ও বিশ্লেষণে সহায়ক।

Content added By

Batch Update এবং Multiple Transactions

282

JDBC (Java Database Connectivity) তে Batch Update এবং Multiple Transactions হল দুটি গুরুত্বপূর্ণ ধারণা যা ডেটাবেসের কার্যক্ষমতা বৃদ্ধি করতে এবং একাধিক ডেটাবেস অপারেশন কার্যকরভাবে পরিচালনা করতে সহায়তা করে। Batch Update একাধিক SQL স্টেটমেন্ট একযোগে চালানোর একটি পদ্ধতি, এবং Multiple Transactions একাধিক ট্রানজেকশন পরিচালনার জন্য ব্যবহৃত হয়, যা ডেটাবেসের উপর চাপ কমায় এবং পারফরম্যান্স উন্নত করে।

1. Batch Update

Batch Update হল একাধিক SQL কিউরিকে একসাথে গ্রুপ করে একবারে ডেটাবেসে পাঠানোর একটি প্রক্রিয়া, যার মাধ্যমে ডেটাবেস অপারেশনগুলোকে সমন্বিতভাবে কার্যকর করা হয়। এটি সাধারণত INSERT, UPDATE, এবং DELETE অপারেশনগুলোতে ব্যবহৃত হয় এবং এটি ডেটাবেসের কার্যক্ষমতা উল্লেখযোগ্যভাবে বৃদ্ধি করে।

Batch Update ব্যবহারের সুবিধা:

  • Performance Improvement: একাধিক SQL কুইরি একযোগে প্রেরণ করলে একাধিক সংযোগ স্থাপন বা একাধিক বার কুইরি পাঠানোর পরিবর্তে কর্মক্ষমতা অনেক বৃদ্ধি পায়।
  • Reduced Network Traffic: সমস্ত SQL অপারেশন একটি ব্যাচে ডেটাবেসে পাঠানো হলে নেটওয়ার্ক ট্রাফিক কমে, যা অ্যাপ্লিকেশনকে দ্রুত করে তোলে।

Batch Update উদাহরণ:

import java.sql.*;

public class BatchUpdateExample {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;

        try {
            // ১. ডেটাবেস সংযোগ স্থাপন
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            // ২. Auto-commit বন্ধ করা
            connection.setAutoCommit(false);

            // ৩. Batch Update এর জন্য PreparedStatement তৈরি করা
            String sql = "INSERT INTO users (id, name, email) VALUES (?, ?, ?)";
            preparedStatement = connection.prepareStatement(sql);

            // ৪. SQL স্টেটমেন্ট ব্যাচে যোগ করা
            preparedStatement.setInt(1, 1);
            preparedStatement.setString(2, "John Doe");
            preparedStatement.setString(3, "johndoe@example.com");
            preparedStatement.addBatch();

            preparedStatement.setInt(1, 2);
            preparedStatement.setString(2, "Jane Smith");
            preparedStatement.setString(3, "janesmith@example.com");
            preparedStatement.addBatch();

            preparedStatement.setInt(1, 3);
            preparedStatement.setString(2, "Mark Johnson");
            preparedStatement.setString(3, "markj@example.com");
            preparedStatement.addBatch();

            // ৫. ব্যাচে সব অপারেশন একসাথে এক্সিকিউট করা
            int[] updateCounts = preparedStatement.executeBatch();

            // ৬. Commit করা
            connection.commit();
            System.out.println("Batch update completed successfully.");
        } catch (SQLException e) {
            try {
                if (connection != null) {
                    connection.rollback(); // ত্রুটি হলে ব্যাচ রোলব্যাক করা
                    System.out.println("Transaction rolled back.");
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
            e.printStackTrace();
        } finally {
            try {
                if (preparedStatement != null) preparedStatement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

কোড ব্যাখ্যা:

  1. Batch Update: একাধিক INSERT স্টেটমেন্ট তৈরি করা হয়েছে এবং addBatch() মেথড দিয়ে এগুলো ব্যাচে যোগ করা হয়েছে।
  2. executeBatch(): একসাথে সমস্ত স্টেটমেন্ট ব্যাচে এক্সিকিউট করা হয়।
  3. Transaction Management: Auto-commit বন্ধ করে ট্রানজেকশন ব্যবস্থাপনা করা হয়েছে, এবং commit() মেথড ব্যবহার করে পরিবর্তনগুলি ডেটাবেসে স্থায়ী করা হয়েছে।

2. Multiple Transactions

Multiple Transactions ব্যবস্থাপনা করার মাধ্যমে একাধিক ট্রানজেকশন একই অ্যাপ্লিকেশনে পরিচালনা করা যায়। এটি সাধারণত যখন একাধিক পৃথক ডেটাবেস অপারেশন একযোগে পরিচালনা করতে হয়, তখন ব্যবহৃত হয়। প্রতিটি ট্রানজেকশন আলাদাভাবে শুরু, কমিট বা রোলব্যাক করা হয়।

Multiple Transactions ব্যবহারের সুবিধা:

  • Atomicity: একাধিক ডেটাবেস অপারেশনকে একসাথে পরিচালনা করা, যাতে একটিও অপারেশন ব্যর্থ হলে পুরো ট্রানজেকশন রোলব্যাক করা যায়।
  • Consistency: একাধিক ট্রানজেকশন পরিচালনা করতে গেলে ডেটাবেসের সামঞ্জস্য বজায় থাকে।
  • Isolation: একটি ট্রানজেকশনের মধ্যে অন্য ট্রানজেকশন থেকে প্রভাব না পড়ে, তা নিশ্চিত করা হয়।

Multiple Transactions উদাহরণ:

import java.sql.*;

public class MultipleTransactionsExample {
    public static void main(String[] args) {
        Connection connection = null;
        Statement statement = null;

        try {
            // ১. ডেটাবেস সংযোগ স্থাপন
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            // ২. Auto-commit বন্ধ করা
            connection.setAutoCommit(false);

            // ৩. Statement তৈরি করা
            statement = connection.createStatement();

            // ৪. প্রথম ট্রানজেকশনের SQL কুইরি চালানো
            String sql1 = "UPDATE accounts SET balance = balance - 500 WHERE account_id = 1";
            statement.executeUpdate(sql1);

            // ৫. দ্বিতীয় ট্রানজেকশনের SQL কুইরি চালানো
            String sql2 = "UPDATE accounts SET balance = balance + 500 WHERE account_id = 2";
            statement.executeUpdate(sql2);

            // ৬. যদি সব কিছু সঠিক থাকে তবে Commit করা
            connection.commit();
            System.out.println("Both transactions committed successfully.");
        } catch (SQLException e) {
            try {
                if (connection != null) {
                    connection.rollback(); // ত্রুটি হলে সমস্ত পরিবর্তন রোলব্যাক করা
                    System.out.println("Transaction rolled back.");
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) statement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

কোড ব্যাখ্যা:

  1. Multiple Transactions: দুটি আলাদা SQL কুইরি একে একে চালানো হয়েছে, যেখানে প্রথমটি অ্যাকাউন্ট ১ থেকে টাকা কেটে অন্য অ্যাকাউন্টে যোগ করছে।
  2. Transaction Management: Auto-commit বন্ধ করে ট্রানজেকশন ব্যবস্থাপনা করা হয়েছে। সমস্ত অপারেশন সঠিকভাবে শেষ হলে commit() মেথড কল করা হয়েছে।
  3. Rollback: যদি কোনো ত্রুটি ঘটে, তবে পুরো ট্রানজেকশন রোলব্যাক করা হয়েছে যাতে ডেটাবেসের সততা বজায় থাকে।

Batch Update এবং Multiple Transactions এর মধ্যে পার্থক্য

FeatureBatch UpdateMultiple Transactions
Use Caseএকাধিক SQL অপারেশন একযোগে সম্পাদন করতেএকাধিক আলাদা SQL অপারেশন পরিচালনা করতে
Performanceউন্নত পারফরম্যান্স, কারণ একবারে একাধিক স্টেটমেন্ট চালানো হয়পারফরম্যান্স কম হতে পারে, কারণ প্রতিটি ট্রানজেকশন আলাদাভাবে সম্পাদিত হয়
Transaction Controlসব অপারেশন একত্রে পরিচালিত হয়, তবে একটি ত্রুটি হলে সব রোলব্যাক করা যায়প্রতিটি ট্রানজেকশন আলাদাভাবে কমিট বা রোলব্যাক করা হয়
Use in JDBCযখন একাধিক এক্সিকিউটেবল কুইরি একসাথে প্রয়োজনযখন একাধিক স্বতন্ত্র ট্রানজেকশন পরিচালনা করতে হয়

সারাংশ

Batch Update এবং Multiple Transactions JDBC তে ডেটাবেস অপারেশন কার্যকরভাবে পরিচালনা করার দুটি গুরুত্বপূর্ণ কৌশল। Batch Update একাধিক SQL কুইরি একযোগে প্রেরণ করে পারফরম্যান্স উন্নত করে, এবং Multiple Transactions একাধিক ট্রানজেকশন পৃথকভাবে পরিচালনা করার সুযোগ দেয়, যাতে প্রতিটি অপারেশন সফল হলে তা স্থায়ী হয়। JDBC তে এই দুটি কৌশল ব্যবহারের মাধ্যমে ডেটাবেসের কর্মক্ষমতা বৃদ্ধি এবং সঠিকতা নিশ্চিত করা যায়।

Content added By

LOB (Large Object) Handling (BLOB এবং CLOB)

302

JDBC (Java Database Connectivity) একটি Java API যা Java অ্যাপ্লিকেশনগুলিকে ডেটাবেসের সাথে যোগাযোগ স্থাপন এবং ডেটাবেস অপারেশন সম্পাদন করতে সক্ষম করে। ডেটাবেসে বড় আকারের ডেটা যেমন ইমেজ, অডিও, ভিডিও, এবং বড় টেক্সট ডেটা সংরক্ষণ করতে LOB (Large Object) ব্যবহৃত হয়। BLOB (Binary Large Object) এবং CLOB (Character Large Object) হল LOB ডেটা টাইপ যা ডেটাবেসে বড় আকারের বাইনারি ডেটা এবং বড় টেক্সট ডেটা সংরক্ষণ করতে ব্যবহৃত হয়।

এই গাইডে, আমরা BLOB (Binary Large Object) এবং CLOB (Character Large Object) সংরক্ষণ এবং রিট্রাইভ করার জন্য JDBC ব্যবহার করার পদ্ধতি নিয়ে আলোচনা করব।


1. LOB (Large Object) Handling Overview

BLOB এবং CLOB ডেটা টাইপগুলো ব্যবহার করা হয় ডেটাবেসে বড় আকারের ডেটা (যেমন ছবি, ভিডিও, বড় টেক্সট) সংরক্ষণের জন্য। BLOB সাধারণত বাইনারি ডেটা (যেমন ছবি, অডিও, ভিডিও) সংরক্ষণ করতে ব্যবহৃত হয়, এবং CLOB সাধারণত বড় টেক্সট ডেটা (যেমন HTML, XML, JSON) সংরক্ষণ করতে ব্যবহৃত হয়।

LOB Types:

  • BLOB (Binary Large Object): এটি বাইনারি ডেটা যেমন ছবি, অডিও বা ভিডিও সংরক্ষণ করতে ব্যবহৃত হয়।
  • CLOB (Character Large Object): এটি টেক্সট ডেটা (যেমন XML, HTML, অথবা সাধারণ বড় টেক্সট) সংরক্ষণ করতে ব্যবহৃত হয়।

2. BLOB (Binary Large Object) Handling

BLOB ডেটা ডেটাবেসে সংরক্ষণ করা

BLOB ডেটা সংরক্ষণের জন্য, আপনি ডেটাবেসে BLOB টাইপ কলাম তৈরি করতে পারেন এবং তারপর JDBC এর মাধ্যমে ডেটা ইনসার্ট করতে পারেন। ডেটাবেসে BLOB ডেটা সংরক্ষণ করতে PreparedStatement ব্যবহার করতে হবে, এবং setBinaryStream() মেথডের মাধ্যমে বাইনারি ডেটা পাঠাতে হবে।

উদাহরণ: BLOB ডেটা সংরক্ষণ করা (Image Example)

import java.sql.*;
import java.io.*;

public class BLOBInsertExample {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement statement = null;

        try {
            // ডেটাবেসে সংযোগ স্থাপন
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            // SQL Query তৈরি করা
            String query = "INSERT INTO images (image_data) VALUES (?)";
            statement = connection.prepareStatement(query);

            // BLOB ডেটা ইনসার্ট করতে একটি FileInputStream ব্যবহার করা
            File imageFile = new File("path_to_image.jpg");
            FileInputStream inputStream = new FileInputStream(imageFile);

            // BLOB ডেটা প্রস্তুত করা
            statement.setBinaryStream(1, inputStream, (int) imageFile.length());

            // ডেটাবেসে ইনসার্ট করা
            int rowsAffected = statement.executeUpdate();
            System.out.println("Rows affected: " + rowsAffected);

        } catch (SQLException | IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) statement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

কোড ব্যাখ্যা:

  1. setBinaryStream(): বাইনারি ডেটা ইনপুট করার জন্য setBinaryStream() মেথড ব্যবহার করা হয়েছে, যেখানে প্রথম প্যারামিটার হল ইনডেক্স, দ্বিতীয় প্যারামিটার হল ইনপুট স্ট্রিম, এবং তৃতীয় প্যারামিটার হল ডেটার দৈর্ঘ্য।
  2. executeUpdate(): ইনসার্ট কুইরি চালানোর জন্য executeUpdate() ব্যবহার করা হয়েছে।

3. CLOB (Character Large Object) Handling

CLOB ডেটা ডেটাবেসে সংরক্ষণ করা

CLOB ডেটা সংরক্ষণ করার জন্য, আপনি ডেটাবেসে CLOB টাইপ কলাম তৈরি করতে পারেন এবং তারপর JDBC এর মাধ্যমে বড় টেক্সট ডেটা ইনসার্ট করতে পারেন। CLOB ডেটা ইনসার্ট করার জন্য, PreparedStatement এর setClob() মেথড ব্যবহার করতে হবে।

উদাহরণ: CLOB ডেটা সংরক্ষণ করা (Text Example)

import java.sql.*;
import java.io.*;

public class CLOBInsertExample {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement statement = null;

        try {
            // ডেটাবেসে সংযোগ স্থাপন
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            // SQL Query তৈরি করা
            String query = "INSERT INTO documents (document_data) VALUES (?)";
            statement = connection.prepareStatement(query);

            // CLOB ডেটা ইনসার্ট করতে একটি FileReader ব্যবহার করা
            File textFile = new File("path_to_text_file.txt");
            FileReader reader = new FileReader(textFile);

            // CLOB ডেটা প্রস্তুত করা
            statement.setCharacterStream(1, reader, (int) textFile.length());

            // ডেটাবেসে ইনসার্ট করা
            int rowsAffected = statement.executeUpdate();
            System.out.println("Rows affected: " + rowsAffected);

        } catch (SQLException | IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) statement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

কোড ব্যাখ্যা:

  1. setCharacterStream(): CLOB ডেটা ইনপুট করার জন্য setCharacterStream() মেথড ব্যবহার করা হয়েছে, যেখানে প্রথম প্যারামিটার হল ইনডেক্স, দ্বিতীয় প্যারামিটার হল ইনপুট স্ট্রিম, এবং তৃতীয় প্যারামিটার হল ডেটার দৈর্ঘ্য।
  2. executeUpdate(): SQL কুইরি চালানোর জন্য executeUpdate() ব্যবহার করা হয়েছে।

4. BLOB এবং CLOB ডেটা রিট্রাইভ করা

BLOB ডেটা রিট্রাইভ করা

BLOB ডেটা রিট্রাইভ করতে, getBinaryStream() মেথড ব্যবহার করা হয়, যা একটি বাইনারি স্ট্রিম রিটার্ন করে। এই স্ট্রিমের মাধ্যমে আপনি ডেটা রিড করতে পারবেন।

উদাহরণ: BLOB ডেটা রিট্রাইভ করা (Image Example)

import java.sql.*;
import java.io.*;

public class BLOBRetrieveExample {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;

        try {
            // ডেটাবেসে সংযোগ স্থাপন
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            // SQL Query তৈরি করা
            String query = "SELECT image_data FROM images WHERE id = ?";
            statement = connection.prepareStatement(query);
            statement.setInt(1, 1);

            // কোয়েরি চালানো
            resultSet = statement.executeQuery();

            if (resultSet.next()) {
                // BLOB ডেটা রিট্রাইভ করা
                InputStream inputStream = resultSet.getBinaryStream("image_data");

                // ডেটা প্রক্রিয়া করা
                FileOutputStream outputStream = new FileOutputStream("output_image.jpg");
                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, bytesRead);
                }

                inputStream.close();
                outputStream.close();
                System.out.println("Image saved successfully.");
            }

        } catch (SQLException | IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (resultSet != null) resultSet.close();
                if (statement != null) statement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

CLOB ডেটা রিট্রাইভ করা

CLOB ডেটা রিট্রাইভ করতে, getCharacterStream() মেথড ব্যবহার করা হয়, যা একটি ক্যারেকটার স্ট্রিম রিটার্ন করে। এই স্ট্রিমের মাধ্যমে আপনি টেক্সট ডেটা রিড করতে পারবেন।

উদাহরণ: CLOB ডেটা রিট্রাইভ করা (Text Example)

import java.sql.*;
import java.io.*;

public class CLOBRetrieveExample {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;

        try {
            // ডেটাবেসে সংযোগ স্থাপন
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            // SQL Query তৈরি করা
            String query = "SELECT document_data FROM documents WHERE id = ?";
            statement = connection.prepareStatement(query);
            statement.setInt(1, 1);

            // কোয়েরি চালানো
            resultSet = statement.executeQuery();

            if (resultSet.next()) {
                // CLOB ডেটা রিট্রাইভ করা
                Reader reader = resultSet.getCharacterStream("document_data");

                // টেক্সট ফাইল রিড করা
                BufferedReader bufferedReader = new BufferedReader(reader);
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    System.out.println(line);
                }

                bufferedReader.close();
                System.out.println("Text file retrieved successfully.");
            }

        } catch (SQLException | IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (resultSet != null) resultSet.close();
                if (statement != null) statement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

সারাংশ

LOB (Large Object) হল এমন একটি ডেটা টাইপ যা ডেটাবেসে বড় আকারের ডেটা সংরক্ষণ এবং রিট্রাইভ করতে ব্যবহৃত হয়। JDBC ব্যবহার করে আপনি BLOB (Binary Large Object) এবং CLOB (Character Large Object) ডেটা টাইপের মাধ্যমে বাইনারি এবং টেক্সট ডেটা সংরক্ষণ এবং রিট্রাইভ করতে পারেন। setBinaryStream() এবং getBinaryStream() মেথড ব্যবহার করে BLOB ডেটা ইনপুট এবং আউটপুট করা হয়, এবং setCharacterStream() এবং getCharacterStream() মেথড ব্যবহার করে CLOB ডেটা ইনপুট এবং আউটপুট করা হয়।

Content added By

উদাহরণ সহ Advanced JDBC Features

273

JDBC (Java Database Connectivity) হল একটি Java API যা ডেটাবেসের সাথে যোগাযোগ এবং ডেটাবেস অপারেশন সম্পাদন করার জন্য ব্যবহৃত হয়। Advanced JDBC Features আপনাকে আরও কার্যকরী, নিরাপদ এবং স্কেলেবল ডেটাবেস অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। এই ফিচারগুলো ডেটাবেসের অপারেশনগুলোকে আরও উন্নত করে তোলে, যেমন বড় আকারের ডেটা পরিচালনা, পারফরম্যান্স অপটিমাইজেশন, এবং ডেটাবেস সংযোগের উন্নত ব্যবস্থাপনা।

এই গাইডে, আমরা Advanced JDBC Features এর মধ্যে কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য এবং তাদের উদাহরণ নিয়ে আলোচনা করব।


1. Batch Processing

Batch Processing হল একটি প্রক্রিয়া যেখানে একাধিক SQL অপারেশন একসাথে এক্সিকিউট করা হয়, যাতে ডেটাবেসে একাধিক স্টেটমেন্ট ইনসার্ট, আপডেট বা ডিলিট করা যায়। এটি পারফরম্যান্সে উন্নতি আনে, কারণ ডেটাবেসে একাধিক কমান্ড পাঠানোর পরিবর্তে একটি কমান্ড পাঠানো হয়।

Batch Processing এর উদাহরণ:

import java.sql.*;

public class BatchProcessingExample {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement statement = null;

        try {
            // ১. ডেটাবেসে সংযোগ স্থাপন
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            // ২. Autocommit বন্ধ করা
            connection.setAutoCommit(false);

            // ৩. Batch statement তৈরি করা
            String query = "INSERT INTO users (name, email) VALUES (?, ?)";
            statement = connection.prepareStatement(query);

            // ৪. ব্যাচে স্টেটমেন্ট যোগ করা
            statement.setString(1, "John Doe");
            statement.setString(2, "john@example.com");
            statement.addBatch();

            statement.setString(1, "Jane Doe");
            statement.setString(2, "jane@example.com");
            statement.addBatch();

            // ৫. ব্যাচ এক্সিকিউট করা
            int[] results = statement.executeBatch();
            System.out.println("Batch executed, rows affected: " + results.length);

            // ৬. commit করা
            connection.commit();

        } catch (SQLException e) {
            // ৭. Rollback করা যদি কোনো ত্রুটি ঘটে
            try {
                if (connection != null) {
                    connection.rollback();
                    System.out.println("Transaction rolled back.");
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        } finally {
            try {
                if (statement != null) statement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

কোড ব্যাখ্যা:

  1. Batch Statement: addBatch() মেথড ব্যবহার করে একাধিক SQL স্টেটমেন্ট ব্যাচে যোগ করা হয়।
  2. executeBatch(): executeBatch() মেথডের মাধ্যমে সমস্ত ব্যাচ একসাথে ডেটাবেসে প্রেরণ করা হয়।
  3. Autocommit: ট্রানজেকশন শুরু করার আগে setAutoCommit(false) ব্যবহার করে autocommit মোড বন্ধ করা হয়, যাতে একাধিক স্টেটমেন্ট একসাথে commit করা যায়।

2. CallableStatement

CallableStatement হল JDBC এর একটি ইন্টারফেস যা stored procedures এবং functions এক্সিকিউট করার জন্য ব্যবহৃত হয়। এটি ডেটাবেসে আগে থেকেই সংজ্ঞায়িত stored procedures বা functions চালাতে পারে, যা ডেটাবেসের মধ্যে লজিক সঞ্চালন করতে ব্যবহৃত হয়।

CallableStatement এর উদাহরণ:

import java.sql.*;

public class CallableStatementExample {
    public static void main(String[] args) {
        Connection connection = null;
        CallableStatement callableStatement = null;

        try {
            // ১. ডেটাবেসে সংযোগ স্থাপন
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            // ২. Stored procedure কল করা
            String storedProcedure = "{call getUserById(?)}"; // getUserById নামে একটি stored procedure কল
            callableStatement = connection.prepareCall(storedProcedure);

            // ৩. প্যারামিটার সেট করা
            callableStatement.setInt(1, 1);  // id প্যারামিটার সেট করা

            // ৪. রেজাল্ট সেট রিট্রাইভ করা
            ResultSet resultSet = callableStatement.executeQuery();

            while (resultSet.next()) {
                System.out.println("ID: " + resultSet.getInt("id"));
                System.out.println("Name: " + resultSet.getString("name"));
                System.out.println("Email: " + resultSet.getString("email"));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (callableStatement != null) callableStatement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

কোড ব্যাখ্যা:

  1. Stored Procedure Call: prepareCall() মেথড ব্যবহার করে stored procedure কল করা হয়।
  2. setInt(): প্যারামিটার হিসেবে id পাঠানো হয়।
  3. executeQuery(): stored procedure এর রেজাল্ট ResultSet এর মাধ্যমে রিট্রাইভ করা হয়।

3. Transaction Management (Commit, Rollback)

জেডিবিসিতে ট্রানজেকশন ম্যানেজমেন্ট গুরুত্বপূর্ণ, বিশেষ করে যখন একাধিক SQL অপারেশন একসাথে করা হয়। commit() এবং rollback() মেথড ব্যবহার করে আপনি ট্রানজেকশন সম্পন্ন বা রিভার্স করতে পারেন।

Transaction Management এর উদাহরণ:

import java.sql.*;

public class TransactionManagementExample {
    public static void main(String[] args) {
        Connection connection = null;
        Statement statement = null;

        try {
            // ১. ডেটাবেসে সংযোগ স্থাপন
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            // ২. Autocommit বন্ধ করা
            connection.setAutoCommit(false);

            // ৩. SQL স্টেটমেন্ট তৈরি করা
            statement = connection.createStatement();

            // ৪. SQL কুইরি চালানো
            statement.executeUpdate("UPDATE users SET email = 'newemail@example.com' WHERE id = 1");
            statement.executeUpdate("DELETE FROM users WHERE id = 2");

            // ৫. commit করা
            connection.commit();
            System.out.println("Transaction committed.");

        } catch (SQLException e) {
            // ৬. rollback করা
            try {
                if (connection != null) {
                    connection.rollback();
                    System.out.println("Transaction rolled back due to error.");
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        } finally {
            try {
                if (statement != null) statement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

কোড ব্যাখ্যা:

  1. setAutoCommit(false): ট্রানজেকশন পরিচালনা করতে autocommit বন্ধ করা হয়েছে।
  2. commit(): সমস্ত SQL অপারেশন সফল হলে commit() ব্যবহার করে পরিবর্তন ডেটাবেসে স্থায়ী করা হয়েছে।
  3. rollback(): যদি কোনো ত্রুটি ঘটে, তবে rollback() মেথড ব্যবহার করে সমস্ত পরিবর্তন বাতিল করা হয়েছে।

4. LOB Handling (BLOB এবং CLOB)

LOB (Large Object) ডেটা টাইপ ডেটাবেসে বৃহৎ ডেটা (যেমন, ছবি, অডিও, ভিডিও, বা বড় টেক্সট) সংরক্ষণের জন্য ব্যবহৃত হয়। JDBC ব্যবহার করে BLOB (Binary Large Object) এবং CLOB (Character Large Object) ডেটা টাইপ ম্যানেজ করা যেতে পারে।

BLOB (Binary Large Object) Handling এর উদাহরণ:

import java.io.*;
import java.sql.*;

public class BlobHandlingExample {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;

        try {
            // ১. ডেটাবেসে সংযোগ স্থাপন
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            // ২. BLOB ফিল্ডে ডেটা ইনসার্ট করা
            String query = "INSERT INTO images (image_data) VALUES (?)";
            preparedStatement = connection.prepareStatement(query);

            // ৩. ইনপুট স্ট্রিম থেকে BLOB ডেটা সেট করা
            FileInputStream inputStream = new FileInputStream(new File("path/to/image.jpg"));
            preparedStatement.setBinaryStream(1, inputStream);

            // ৪. SQL এক্সিকিউট করা
            int rowsAffected = preparedStatement.executeUpdate();
            System.out.println("Rows affected: " + rowsAffected);

        } catch (SQLException | FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                if (preparedStatement != null) preparedStatement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

CLOB (Character Large Object) Handling এর উদাহরণ:

import java.io.*;
import java.sql.*;

public class ClobHandlingExample {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;

        try {
            // ১. ডেটাবেসে সংযোগ স্থাপন
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

            // ২. CLOB ফিল্ডে ডেটা ইনসার্ট করা
            String query = "INSERT INTO documents (document_content) VALUES (?)";
            preparedStatement = connection.prepareStatement(query);

            // ৩. CLOB ডেটা সেট করা
            FileReader reader = new FileReader("path/to/textfile.txt");
            preparedStatement.setCharacterStream(1, reader);

            // ৪. SQL এক্সিকিউট করা
            int rowsAffected = preparedStatement.executeUpdate();
            System.out.println("Rows affected: " + rowsAffected);

        } catch (SQLException | FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                if (preparedStatement != null) preparedStatement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

সারাংশ

Advanced JDBC Features আপনাকে JDBC ব্যবহার করে ডেটাবেসের সাথে আরও কার্যকরী এবং নিরাপদভাবে কাজ করার সুযোগ দেয়। Batch Processing এর মাধ্যমে একাধিক SQL অপারেশন একত্রে এক্সিকিউট করা যায়, CallableStatement ব্যবহার করে stored procedures এবং functions এক্সিকিউট করা যায়, এবং LOB Handling (BLOB এবং CLOB) আপনাকে বড় ডেটা (যেমন ছবি, টেক্সট, বা অন্যান্য বড় ফাইল) ডেটাবেসে সঞ্চয় এবং পুনরুদ্ধার করার সুবিধা দেয়।

এই ফিচারগুলো ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের পারফরম্যান্স এবং স্কেলেবিলিটি আরও উন্নত করতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...